home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Talking Clock Pro™ 2.0.1 / Talking Clock Pro Source / Controller / Source / menu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-09-04  |  4.5 KB  |  269 lines  |  [TEXT/CWIE]

  1. /*
  2.  * menu.h
  3.  */
  4.  
  5. #include "menu.h"
  6. #include "window.h"
  7. #include "x.h"
  8. #include "speech.h"
  9. #include "util.h"
  10.  
  11.  
  12. Handle gMenuBar ;
  13.  
  14.  
  15. void
  16. DoMenu ( EventRecord * event ) {
  17.  
  18.     UpdateMenus ( ) ;
  19.     SelectMenu ( MenuSelect ( event -> where ) ) ;
  20. }
  21.  
  22.  
  23. void
  24. SelectMenu ( long selection ) {
  25.  
  26.     DispatchMenu ( selection >> 16 , selection & 0xffff ) ;
  27. }
  28.  
  29.  
  30. void
  31. DispatchMenu ( short menu , short item ) {
  32.  
  33. Str255 menuItem ;
  34. MenuHandle mh ;
  35. DefWindowRec * rec ;
  36. WindowPtr wp ;
  37.  
  38.     if ( ! menu || ! item ) {
  39.         return ;
  40.     }
  41.     HiliteMenu ( menu ) ;
  42. #if 0
  43.     if ( menu == EDIT_MENU ) { /* edit menu */
  44.         if ( item <= CLEAR_ITEM ) {
  45.             if ( SystemEdit ( item - 1 ) ) {
  46.                 HiliteMenu ( 0L ) ;
  47.                 return ;
  48.             }
  49.         }
  50.     }
  51. #endif
  52.  
  53.     if ( item ) {
  54.         mh = GetMHandle ( menu ) ;
  55.         if ( mh ) {
  56.             GetItem ( mh , item , menuItem ) ;
  57.             rec = GetFrontWindow ( & wp ) ;
  58.             SetPort ( wp ) ;
  59.             if ( rec && rec -> DoCommand ) {
  60.                 FailErr ( ( * ( rec -> DoCommand ) ) ( wp , rec -> data , menu ,
  61.                     item , menuItem ) ) ;
  62.             } else {
  63.                 FailErr ( ( * app . DoCommand ) ( wp , app . data , menu , item ,
  64.                     menuItem ) ) ;
  65.             }
  66.         }
  67.     }
  68.     HiliteMenu ( 0L ) ;
  69. }
  70.  
  71.  
  72. void
  73. UpdateMenus ( void ) {
  74.  
  75. WindowPtr wp ;
  76. DefWindowRec * rec = GetFrontWindow ( & wp ) ;
  77.  
  78.     UpdateWinMenus ( wp , rec ) ;
  79. }
  80.  
  81.  
  82. void
  83. UpdateWinMenus ( WindowPtr wp , DefWindowRec * rec ) {
  84.  
  85.     DisableAll ( ) ;
  86.     if ( rec && rec -> PrepareMenus ) {
  87.         FailErr ( ( * ( rec -> PrepareMenus ) ) ( wp , rec -> data ) ) ;
  88.     } else {
  89.         FailErr ( ( * app . PrepareMenus ) ( wp , app . data ) ) ;
  90.     }
  91. }
  92.  
  93.  
  94. static void
  95. MakeVoiceMenu ( MenuHandle mh ) {
  96.  
  97. short numVoices ;
  98. short voiceNum ;
  99. VoiceSpec spec ;
  100. VoiceDescription info ;
  101.  
  102.     FailErr ( CountVoices ( & numVoices ) ) ;
  103.     for ( voiceNum = 1 ; voiceNum <= numVoices ; voiceNum ++ ) {
  104.         FailErr ( GetIndVoice ( voiceNum , & spec ) ) ;
  105.         FailErr ( GetVoiceDescription ( & spec , & info , sizeof ( info ) ) ) ;
  106.         AppendMenu ( mh , "\p\001" ) ;
  107.         SetItem ( mh , voiceNum , info . name ) ;
  108.     }
  109. }
  110.  
  111.  
  112. void
  113. MakeMenus ( void ) {
  114.  
  115. Handle h ;
  116. MenuHandle mh ;
  117.  
  118.     gMenuBar = GetResource ( 'MBAR' , 128 ) ;
  119.     FailNil ( gMenuBar ) ;
  120.  
  121.     h = GetNewMBar ( 128 ) ;
  122.     FailNil ( h ) ;
  123.     SetMenuBar ( h ) ;
  124.     DrawMenuBar ( ) ;
  125.  
  126.     mh = GetMHandle ( APPLE_MENU ) ; /* Add apple menu items */
  127.     FailNil ( mh ) ;
  128.     AddResMenu ( mh , 'DRVR' ) ;
  129.  
  130.     mh = GetMHandle ( FONT_MENU ) ; /* Add fonts */
  131.     FailNil ( mh ) ;
  132.     AddResMenu ( mh , 'FONT' ) ;
  133.  
  134.     DisableCmd ( FONT_MENU , 0 ) ;
  135.     DisableCmd ( SIZE_MENU , 0 ) ;
  136.     DisableCmd ( CLOCK_MENU , 0 ) ;
  137. }
  138.  
  139.  
  140. void
  141. DisableMenu ( short menu ) {
  142.  
  143. MenuHandle mh ;
  144. short items ;
  145.  
  146.     mh = GetMHandle ( menu ) ;
  147.     FailNil ( mh ) ;
  148.     items = CountMItems ( mh ) ;
  149.     while ( items -- ) {
  150.         DisableItem ( mh , items + 1 ) ;
  151.         CheckItem ( mh , items + 1 , 0 ) ;
  152.     }
  153. }
  154.  
  155.  
  156. void
  157. EnableMenu ( short menu ) {
  158.  
  159. MenuHandle mh ;
  160. short items ;
  161.  
  162.     mh = GetMHandle ( menu ) ;
  163.     FailNil ( mh ) ;
  164.     items = CountMItems ( mh ) ;
  165.     while ( items -- ) {
  166.         EnableItem ( mh , items + 1 ) ;
  167.     }
  168. }
  169.  
  170.  
  171. void
  172. DisableAll ( void ) {
  173.  
  174. short * ptr = ( short * ) * gMenuBar ;
  175. short num = * ( ptr ++ ) ;
  176.  
  177.     HLock ( gMenuBar ) ;
  178.     while ( num -- ) {
  179.         if ( * ptr == APPLE_MENU ) {
  180.             ptr ++ ;
  181.             continue ;
  182.         }
  183.         DisableMenu ( * ( ptr ++ ) ) ;
  184.     }
  185.     HUnlock ( gMenuBar ) ;
  186. }
  187.  
  188.  
  189.  
  190. void
  191. EnableCmd ( short menu , short item ) {
  192.  
  193. MenuHandle mh ;
  194.  
  195.     mh = GetMHandle ( menu ) ;
  196.     FailNil ( mh ) ;
  197.     EnableItem ( mh , item ) ;
  198. }
  199.  
  200.  
  201. void
  202. DisableCmd ( short menu , short item ) {
  203.  
  204. MenuHandle mh ;
  205.  
  206.     mh = GetMHandle ( menu ) ;
  207.     FailNil ( mh ) ;
  208.     DisableItem ( mh , item ) ;
  209. }
  210.  
  211.  
  212. void
  213. CheckCmd ( short menu , short item , Boolean checked ) {
  214.  
  215. MenuHandle mh ;
  216.  
  217.     mh = GetMHandle ( menu ) ;
  218.     FailNil ( mh ) ;
  219.     CheckItem ( mh , item , checked ) ;
  220. }
  221.  
  222.  
  223. void
  224. CheckStr ( short menu , unsigned char * str , Boolean checked ) {
  225.  
  226. MenuHandle mh ;
  227. short items ;
  228. Str255 mstr ;
  229.  
  230.     mh = GetMHandle ( menu ) ;
  231.     FailNil ( mh ) ;
  232.     items = CountMItems ( mh ) ;
  233.     while ( items -- ) {
  234.         GetItem ( mh , items + 1 , mstr ) ;
  235.         if ( EqualString ( mstr , str , 0 , 1 ) ) {
  236.             CheckItem ( mh , items + 1 , checked ) ;
  237.             break ;
  238.         }
  239.     }
  240. }
  241.  
  242.  
  243. void
  244. SizeMenuOutlines ( short fontNum ) {
  245.  
  246. MenuHandle mh = GetMHandle ( SIZE_MENU ) ;
  247. short items ;
  248. long l ;
  249. Str15 size ;
  250. Boolean bb ;
  251.  
  252.     FailNil ( mh ) ;
  253.     items = CountMItems ( mh ) ;
  254.     while ( items -- ) {
  255.         if ( items == 0 || ( items + 1 ) >= FIRST_SIZE_ITEM ) {
  256.             GetItem ( mh , items + 1 , size ) ;
  257.             StringToNum ( size , & l ) ;
  258.             if ( RealFont ( fontNum , l ) ) {
  259.                 SetItemStyle ( mh , items + 1 , outline ) ;
  260.             } else {
  261.                 SetItemStyle ( mh , items + 1 , 0 ) ;
  262.             }
  263.         }
  264.     }
  265.     bb = RealFont ( fontNum , 219 ) ;
  266.     SetItemStyle ( mh , SMALLER_ITEM , bb ) ;
  267.     SetItemStyle ( mh , LARGER_ITEM , bb ) ;
  268. }
  269.